package com.lanyou.esb.cook.proxy.service;

import java.util.Date;

import com.lanyou.esb.cook.proxy.entity.IfAlarm;
import com.lanyou.esb.cook.proxy.entity.IfAlrReqTimes;
import com.lanyou.esb.cook.proxy.entity.IfReqQuantity;
import com.lanyou.esb.cook.proxy.exception.IfAlarmException;

/**
 * 接口请求量控制服务接口
 * 
 * @author Davey.wu
 */
public interface IfReqQuantityService {
	/**
	 * 加载所有接口请求量控制信息到REDIS
	 */
	void loadAllToRedis();

	/**
	 * 获取接口请求量控制信息
	 * 
	 * @param ifId
	 *            ：接口ID
	 * @param reqUnit
	 *            ：请求单位
	 * @return
	 */
	IfReqQuantity get(String ifId, String reqUnit);

	/**
	 * 重新加载
	 * 
	 * @param quantity
	 *            :接口请求量控制
	 * @return
	 */
	void reload(IfReqQuantity quantity);

	/**
	 * 告警
	 * 
	 * @param quantity
	 *            :接口请求量控制
	 * @param ifAlrReqTimes
	 *            :接口已请求次数
	 * @param reqDate
	 *            ：请求时间
	 * @return
	 */
	IfAlarm alarm(IfReqQuantity quantity, IfAlrReqTimes ifAlrReqTimes,
			Date reqDate) throws IfAlarmException;

}
